package vip.ifmm.lehouse.commodity.service.api;

import com.github.pagehelper.PageInfo;
import vip.ifmm.lehouse.common.bo.CommodityBo;
import vip.ifmm.lehouse.common.dto.ServerResponse;
import vip.ifmm.lehouse.common.exception.commodity.CommoditySavedInServiceException;
import vip.ifmm.lehouse.common.exception.commodity.CommodityUpdatedInServiceException;
import vip.ifmm.lehouse.common.vo.CommodityVo;

/**
 * 商品管理服务接口
 *
 * @author Fish
 * <p>Email: fishinlove@163.com</p>
 * <p>created by 2019/06/21 19:30:36</p>
 */
public interface CommodityService {

    /**
     * 保存一个商品信息
     * 参数是经过包装之后的商品对象，有需要的所有信息
     *
     * @param commodityBo 包装过的商品对象
     */
    ServerResponse<Void> saveCommodity(CommodityBo commodityBo) throws CommoditySavedInServiceException;

    /**
     * 查询商品列表
     *
     * @param pageNum 查询第几页
     * @param pageSize 一页显示多少条数据
     */
    ServerResponse<PageInfo<?>> listCommodities(int pageNum, int pageSize);

    /**
     * 根据商品分类 id 查询商品列表
     *
     * @param pageNum 查询第几页
     * @param pageSize 一页显示多少条数据
     * @param typeId 商品分类 id
     */
    ServerResponse<PageInfo<?>> listCommoditiesByTypeId(int pageNum, int pageSize, int typeId);

    /**
     * 根据商品 id 查询商品详情
     *
     * @param commodityId 指定的商品 id
     */
    ServerResponse<CommodityVo> getCommodity(int commodityId);

    /**
     * 更新商品信息
     *
     * @param commodityVo 要被更新的商品信息
     */
    ServerResponse<Void> updateCommodity(CommodityVo commodityVo) throws CommodityUpdatedInServiceException;
}
